package reservation;

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * Classe client: client béneficiant de la seule possibilité de réserver
 * 
 * @author Alexandre Boursier and Mamadou Diallo and Cyril Gorrieri and Emmanuel
 *         Menage
 * @version 2012.01.23
 */

public class Client extends Personne implements Serializable {
	private static final long serialVersionUID = 6065003861559304083L;

	/**
	 * Contructeur : Client crée un client selon un  login
	 * @param login
	 * 				le login de la personne qui fait l'objet d'une reservation
	 */
	public Client(String login) {
		super(login);
	}

	/**
	 * Ajouter tous les attributs d'un objet dans une liste
	 * 
	 * @return retourne la liste des attributs d'un objet
	 */
	public List<String> parse() {
		List<String> attributes = new ArrayList<String>();
		attributes.add("VOYAGEUR");
		attributes.add(getLogin());
		return attributes;
	}

	/**
	 * toString()
	 * 
	 * @return une chaine  contenant les informations d'un client
	 */
	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb.append(" - Login : " + getLogin() + ".\n");
		return sb.toString();
	}

	/**
	 * Demander à un client simple de faire une reservation
	 * 
	 * @param t
	 *            Le trajet (voyage) auquel il souhaite s'inscrire
	 * @return
	 * @throws IOException
	 */
	public boolean demanderReservation(Billet b){
		try {
			if(Serveur.getInstance().traiterDemandeReservation(b)) {
				b.reservation();
				return true;
			} else {
				return false;
			}
		} catch (IOException e) {
			return false;
		}
	}
	/**
	 * Demande la possibilité de faire une reservation d'un billet
	 * @param b
	 * 			le billet qu'on souhaite reservé
	 * @return true s'il ya possibilité de faire une reservation, faux sinon
	 */
	public boolean demanderPossibiliteReservation(Billet b) {
		return Serveur.getInstance().canReserve(b);
	}

	/**
	 * retourne la liste de tous les billets reservés par le client
	 * @return List<Billet> 
	 * 						la liste des billets reservés par le client
	 */
	public List<Billet> getBillets() {
		return Serveur.getInstance().obtenirBillets(this);
	}
}
